home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 101_200 / DISK0163 / DISK0163.ZIP / TRANSLIT.C < prev    next >
Text File  |  1983-08-22  |  2KB  |  66 lines

  1. /* translit.c by Michael Hanson */
  2. /* you may use this, but not for profit, and please give me credit */ 
  3. /* translit character translation program */
  4.  
  5. #include "stdio.h"
  6.  
  7. #define MAXSET 300
  8. #define NOT '!'
  9. #define DUMEOF 0x1a
  10.  
  11. main(argc,argv)
  12. int argc;
  13. char *argv[];
  14. {
  15.     int allbut,collap,i,lastto;
  16.     int c;
  17.     char from[MAXSET],to[MAXSET];
  18.  
  19.     if(ver()<0x200){
  20.         error("translit: wrong DOS version",1);
  21. #asm
  22.         db 'by Michel Hanson v1.0',1ah
  23. #
  24.     }
  25.     else if(argc<2)
  26.         error("usage: translit from to.",1);
  27.     else if(*argv[1] == NOT){
  28.         allbut = YES;
  29.         if(makset(argv[1],1,from,MAXSET) == NO)
  30.             error("from:too large.",1);
  31.         }
  32.     else {
  33.         allbut = NO;
  34.         if(makset(argv[1],0,from,MAXSET) == NO)
  35.             error("from: too large.",1);
  36.         }
  37.     if(argc<3)
  38.         to[0]=EOS;
  39.     else if(makset(argv[2],0,to,MAXSET) == NO)
  40.         error("to: too large.",1);
  41.     
  42.     lastto = strlen(to);
  43.     collap = (strlen(from) > lastto || allbut == YES) ? YES : NO ;
  44.     do{
  45.         i= xindex(from,(c = getc(STDIN)),allbut,lastto);
  46.         if(collap == YES && i >= lastto && lastto>0){ /* collapse */
  47.             putc(to[lastto-1],STDOUT);
  48.             do 
  49.                 i = xindex(from,(c = getc(STDIN)),allbut,lastto);
  50.             while(i >= lastto);
  51.             }
  52.         if(c == EOF || c == DUMEOF)
  53.             break;
  54.         if(i>-1 && lastto>0) /* translate */
  55.             putc(to[i],STDOUT);
  56.         else if(i == -1)     /* copy */
  57.             putc((char) c,STDOUT);
  58.     }while(TRUE);
  59. }
  60. #include "version.c"
  61. #include "sets.c"
  62. #include "err.c"
  63. #include "inde.c"
  64. #include "filps.c"
  65. #include "esct.c"
  66.